ESTRUCTURAS DE CONTROL


INSTRUCCIONES IF, ELIF, ELSE

El intérprete de Python ejecuta un programa ejecutando una instrucción cada vez.

if <condition>:
    <do something>
elif <condition2>:
    <do other thing>
else:
    <do other thing>

Recordar que en Python los bloques se delimitan por sangrado.

  • Cuando ponemos los dos puntos al final de la primera línea del condicional, todo lo que vaya a continuación con un nivel de sangrado superior se considera dentro del condicional.

  • En cuanto escribimos la primera línea con un nivel de sangrado inferior, hemos cerrado el condicional.


In [26]:
x, y = 2, 0
if x > y:
    print("x es mayor que y")
    print("x sigue siendo mayor que y")


x es mayor que y
x sigue siendo mayor que y

In [3]:
if 1 < 0:
    print("1 es mayor que 0")     # esto está dentro de bucle, pero no se escribe por que no cumple que 1 sea menor que 0
print("Esto se ejecuta siempre")  # esto no está dentro del bloque y SE ejecuta siempre; ya que no pertenece al IF


Esto se ejecuta siempre

In [4]:
if 1 < 0:
    print("1 es menor que 0")
     print("1 sigue siendo menor que 0")    # error de sangrado, porque el sangrado es superior


  File "<ipython-input-4-8231ed33204f>", line 3
    print("1 sigue siendo menor que 0")    # error de sangrado, porque el sangrado es superior
    ^
IndentationError: unexpected indent

Si queremos añadir ramas adicionales al condicional, podemos emplear la instrucción elif (abreviatura de else if). Para la parte final, que debe ejecutarse si ninguna de las condiciones anteriores se ha cumplido, usamos la instrucción else.


In [7]:
x, y = 2, 0
if x > y:
    print("x es mayor que y")
else:
    print("x es menor que y")


x es mayor que y

In [18]:
# Uso de ELIF (contracción de else if)
x, y = 2 , 0
if x < y:
    print("x es menor que y")
elif x == y:
    print("x es igual a y")
else:
    print("x es mayor que y")


x es mayor que y


EXPRESIONES TERNARIAS

Las expresiones ternarias en Python tienen la siguiente forma:

  • e = valorSiTrue if <condicion> else valorSiFalse

Permite definir la instrucción if-else en una sola línea. La expresión anterior es equivalente a:

  • if <condicion>: e = valorSiTrue else: e = valorSiFalse

In [38]:
# Una expresión ternaria es una contracción de un bucle FOR
# Se define la variable para poder comparar
x = 8
# Se puede escrbir la expresión de esta manera o almacenando el resultado dentro de una variable 
# para trabajar posteriormente con ella
"Hola CICE" if x == 8 else "Adios CICE"
a = 'x es igual a 8' if x == 8 else 'x es distinto de 8'
a


Out[38]:
'x es igual a 8'


BUCLES FOR Y WHILE

El bucle FOR

Permite realizar una tarea un número fijo de veces. Se utiliza para recorrer una colección completa de elementos (una tupla, una lista, un diccionario, etc ):

    for <element> in <iterable_object>:
        <hacer algo...>

  • Aquí el objeto <iterable_object> puede ser una lista, tupla, array, diccionario, etc.
  • El bucle se repite un número fijo de veces, que es la longitud de la colección de elementos.

In [30]:
# itera soble los elementos de la tupla
for elemento in (1, 2, 3, 4, 5):
    print(elemento)


1
2
3
4
5

In [42]:
# Suma todos los elementos de la tupla
suma = 0
for elemento in (1, 2, 3, 4, 5):
    suma = suma + elemento
print(suma)


15

In [47]:
# Muestra todos los elemntos de una lista
dias = ["Lunes", "Martes", "Miércoles", "Jueves", 'Viernes', 'Sábado', 'Domingo']
for nombre in dias:
    print(nombre)


Lunes
Martes
Miércoles
Jueves
Viernes
Sábado
Domingo

In [48]:
# La instrucción CONTINUE permite saltar de una iteración a otra
# Crea la lista de enteros en el intervalo [0,10)
# No se ejecuta si j es un número par, gracias a la sentencia continue
for j in range(10):
    if j % 2 == 0:
        continue 
    print(j)


1
3
5
7
9

In [51]:
# También es posible recorrer un diccionario mediante el bucle FOR
# dic.items
# dic.keys
# dic.values
dic =  {1:'Lunes', 2:'Martes', 3:'Miércoles' }
# Python 3.5
for i in dic.items():
    print(i)


(1, 'Lunes')
(2, 'Martes')
(3, 'Miércoles')

In [35]:
dic =  {1:'Lunes', 2:'Martes', 3:'Miércoles' }
# Python 3.5
for (clave, valor) in dic.items():
    print("La clave es: " + str(clave) + " y el valor es: " + valor)


La clave es: 1 y el valor es: Lunes
La clave es: 2 y el valor es: Martes
La clave es: 3 y el valor es: Miércoles

In [36]:
dic.items(), dic.keys(), dic.values()


Out[36]:
(dict_items([(1, 'Lunes'), (2, 'Martes'), (3, 'Miércoles')]),
 dict_keys([1, 2, 3]),
 dict_values(['Lunes', 'Martes', 'Miércoles']))


El bucle WHILE

Los bucles while repetirán las instrucciones anidadas en él mientras se cumpla una condición:

    while <condition>:
    <things to do>

  • El número de iteraciones es variable, depende de la condición. +Como en el caso de los condicionales, los bloques se separan por sangrado sin necesidad de instrucciones del tipo end.

In [52]:
i = -2
while i < 5:
    print(i)
    i = i + 1
print("Estoy fuera del while")


-2
-1
0
1
2
3
4
Estoy fuera del while

In [38]:
# Para interrumpir un bucle WHILE se utiliza la instrucción BREAK
# Se pueden usar expresiones de tipo condicional (AND, OR, NOT)
i = 0
j = 1
while i < 5 and j == 1:
    print(i)
    i = i + 1
    if i == 3:
        break


0
1
2


LA FUNCIÓN ENUMERATE

Cuando trabajamos con secuencias de elementos puede resultar útil conocer el índice de cada elemento. La función enumerate devuelve una secuencia de tuplas de la forma (i, valor).

Mediante un bucle es posible recorrerse dicha secuencia:


In [39]:
# Creamos una lista llamada ciudades
# Recorremos dicha lista mediante la instrucción FOR asignando una secuencia de números (i) a cada valor de la lista
ciudades = ["Madrid", "Sevilla", "Segovia", "Valencia" ]
for (i, valor) in enumerate(ciudades):
    print('%d: %s' % (i, valor))


0: Madrid
1: Sevilla
2: Segovia
3: Valencia

In [40]:
# Uso de la función reversed 
# la función reversed devuelve un iterador inverso de una lista
for (i, valor) in enumerate(reversed(ciudades)):
    print('%d: %s' % (i, valor))


0: Valencia
1: Segovia
2: Sevilla
3: Madrid